package service

import (
	"go-ecommerce/internal/model"
	"gorm.io/gorm"
)

// CategoryTreeDTO 分类返回结构（树形）
type CategoryTreeDTO struct {
	ID       uint              `json:"id"`        // 分类 ID
	Name     string            `json:"name"`      // 分类名称
	Sort     int               `json:"sort"`      // 排序
	ParentID uint              `json:"parent_id"` // 父级分类 ID
	Children []CategoryTreeDTO `json:"children"`  // 子分类
}

// GetAllCategories 获取所有分类（递归构造树状结构）
func GetAllCategories(db *gorm.DB) ([]CategoryTreeDTO, error) {
	var categories []model.Category

	// 查询所有分类，按排序从小到大
	err := db.Order("sort ASC").Find(&categories).Error
	if err != nil {
		return nil, err
	}

	// 转换为树结构
	tree := buildCategoryTree(categories, 0) // 从 ParentID = 0 开始构造根节点
	return tree, nil
}

// buildCategoryTree 递归构造分类树
func buildCategoryTree(categories []model.Category, parentID uint) []CategoryTreeDTO {
	var tree []CategoryTreeDTO

	for _, cat := range categories {
		if cat.ParentID == parentID {
			// 找到当前层级的分类，构建 DTO
			node := CategoryTreeDTO{
				ID:       cat.ID,
				Name:     cat.Name,
				Sort:     cat.Sort,
				ParentID: cat.ParentID,
				Children: buildCategoryTree(categories, cat.ID), // 递归找子分类
			}
			tree = append(tree, node)
		}
	}

	return tree
}

// CreateCategory 创建分类
func CreateCategory(db *gorm.DB, name string, sort int) error {
	category := model.Category{Name: name, Sort: sort}
	return db.Create(&category).Error
}

// UpdateCategory 更新分类
func UpdateCategory(db *gorm.DB, id uint, name string, sort int) error {
	return db.Model(&model.Category{}).Where("id = ?", id).Updates(model.Category{
		Name: name,
		Sort: sort,
	}).Error
}

// DeleteCategory 删除分类（软删除）
func DeleteCategory(db *gorm.DB, id uint) error {
	return db.Delete(&model.Category{}, id).Error
}
